From 2223a855623a208e85c8ed1dd19f552e6b58a522 Mon Sep 17 00:00:00 2001
From: Pedro Folloni Pesserl <fpesserl7@gmail.com>
Date: Sat, 25 Feb 2023 12:27:53 -0300
Subject: [PATCH] tshell:p3:sed one liner

---
 tshell/tshell_p3.sh | 70 +++++++++++++++++++++++++++++++++------------
 1 file changed, 52 insertions(+), 18 deletions(-)

diff --git a/tshell/tshell_p3.sh b/tshell/tshell_p3.sh
index ade5039..fb3d7a1 100755
--- a/tshell/tshell_p3.sh
+++ b/tshell/tshell_p3.sh
@@ -23,10 +23,8 @@ confere_arq_saida() {
 		>&2 echo "Erro: formato incorreto para $1 (deve ser .csv)"
 		exit 2
 	fi
-
-	if [ ! -f $1 ]; then
-		touch $1
-	fi
+	
+	echo "version+pmid<title<abstract<keywords" > $1
 }
 
 XML=$1
@@ -37,32 +35,68 @@ CSV=$2
 confere_arq_saida $CSV
 CSV=$(realpath $CSV)
 
-# separar os campos úteis do arquivo xml.gz
+# converter o arquivo xml.gz para o formato csv
 zcat $XML | \
 	xgrep -tx "//PMID|//ArticleTitle|//Abstract|//MeshHeadingList" | \
-	# o sed acha um campo PMID, seguido de um campo ArticleTitle, seguido
-	# de um campo Abstract, e imprime. Se houver um campo MeshHeadingList
-	# após o Abstract, imprime também; se não, insere um vazio.
+	# o sed acha os campos úteis -- PMID seguido de ArticleTitle seguido
+	# de Abstract, seguido ou não de MeshHeadingList -- e converte no
+	# formato csv. No caso de não haver MeshHeadingList para um dado artigo,
+	# cria um campo vazio (<).
 	sed -En '
-	/<PMID/{
+	/PMID/{
+		s/<PMID Version="//;
+		s/">//;
+		s/<\/PMID>//;
 		N;
-		/<ArticleTitle>/{
+
+		/ArticleTitle/{
+			s/<ArticleTitle>/</;
+			s/<\/ArticleTitle>//;
 			N;
-			/<Abstract>/{
+
+			/Abstract/{
+				s/<Abstract> *<AbstractText>/</;
+				s/<\/AbstractText> *<\/Abstract>//;
 				p;
 				n;
-				/<MeshHeadingList>/{
+
+				/MeshHeadingList/{
+					s/ *<MeshHeading> *<Descriptor[^>]*>//g;
+					s/(<\/DescriptorName>|<\/QualifierName>) *(<Qualifier[^>]*>|<\/MeshHeading>)/, /g;
+					s/<MeshHeadingList>/</;
+					s/(, *|)<\/MeshHeadingList>//;
 					p;
 				};
-				/<PMID/{
-					i <MeshHeadingList></MeshHeadingList>
+
+				/PMID/{
+					i <
 				}
 			}
 		}
-	}' > $CSV
+	}' >> $CSV
+
+# converter para o formato csv
+# sed -i '
+# 	/PMID/{
+# 		s/<PMID Version="//;
+# 		s/">//;
+# 		s/<\/PMID>//;
+# 	}
+
+# 	/ArticleTitle/{
+# 		s/<ArticleTitle>/</;
+# 		s/<\/ArticleTitle>//;
+# 	}
 
-# /<[^>]*>/
+# 	/Abstract/{
+# 		s/<Abstract> *<AbstractText>/</;
+# 		s/<\/AbstractText> *<\/Abstract>//;
+# 	}
 
+# 	/MeshHeadingList/{
+# 		s/ *<MeshHeading> *<Descriptor[^>]*>//g;
+# 		s/\(<\/DescriptorName>\|<\/QualifierName>\) *\(<Qualifier[^>]*>\|<\/MeshHeading>\)/, /g;
+# 		s/<MeshHeadingList>/</;
+# 		s/\(, *\|\)<\/MeshHeadingList>//;
+# 	}' $CSV
 
-# inserir a linha de cabeçalho no arquivo
-sed -i '1i version+pmid<title<abstract<keywords' $CSV
-- 
GitLab