Wie kann ich die folgende Aufgabe in Bash ausführen?
Ich muss ein Skript schreiben, das ein Python-Skript für jede Zeile einer Textdatei als Eingabe separat ausführt und das Ergebnis dann in einer JSON-Datei speichert, die nach der Zeile benannt ist, aus der es die Datei liest.
Die Textdatei 10tweets.txt sieht also folgendermaßen aus:
Katze 10tweets.txt
Trump on the other hand goes all in on water boarding AND some. #GOPDebate
RT @wpjenna Donald Trump promises that he will not touch the 2nd amendment -- "unless we're going to make it stronger."
Trump 23%, Rubio 19%, Kasich & Bush 14%, Christie 10%, Cruz 9% #NHPrimary
@realDonaldTrump Thank you for saying you won't use vulger language anymore. Talk about Sanders & Clinton. Take Cruz as VP. Mexican votes!!!
RT @SurfPHX Mr. Trump @realDonaldTrump tweeted 25 minutes ago. You all do realize, that our future President hardly sleeps. He's a Fighter and a Worker!
go, Bernie #DemDebate
Sanders calls out Clinton on taking Foreign Policy advice from Warmonger Henry Kissinger https://t.co/xT5J4uh4m4 via @YouTube
Cruz, Rubio, and the Moral Bankruptcy of Progressive Identity Politics https://t.co/kSQstJXtKO via @NRO
RT @scarylawyerguy "Who does Bernie Sanders listen to on foreign policy." - A question Hillary had to raise b/c the media will not. #DemDebate
Why Did U of California Fire Tenured Riverside Professor? / Ted Cruz and Higher Ed -- ... - https://t.co/zFxa4Q70wh
und ich möchte, dass die Ausgabe im Ausgabeordner wie 1.json, 2.json, 3.json, 4.json, 5.json aussieht.
Ich bin mir nicht sicher, wie ich es in einem Bash-Skript verwenden exec entity_sentiment.py "$@"
und mit jeder Zeile der Datei verknüpfen kann. Das Skript wird wie folgt ausgeführt:
$ python entity_sentiment.py sentiment-entities-text "Thank you for saying you won't use vulger language anymore"
Mentions:
Name: "vulger language"
Begin Offset : 35
Content : vulger language
Magnitude : 0.699999988079071
Sentiment : -0.699999988079071
Type : 2
Salience: 1.0
Sentiment: magnitude: 0.699999988079071
score: -0.699999988079071
Dabei könnte beispielsweise davon ausgegangen werden, dass die Eingabe für das Skript die erste Zeile der Datei ist.
Grundsätzlich analysiert das Ausführen des folgenden Bash-Skripts nur die letzte Zeile der Datei und speichert sie in 1.json
#!/bin/bash
n=1
while read -u 3 -r line; do
python entity_sentiment.py sentiment-entities-text "$line" > "$((n++)).json"
done 3< 10tweets.txt
Hier ist ein Ausschnitt dessen, was passiert, wenn ich einen Vorschlag im Bash-IRC-Kanal ausführe:https://pastebin.com/raw/VQpPFJYsUndhttps://pastebin.com/raw/GQefrTX0
Antwort1
Sie können read
die Eingabedatei Zeile für Zeile durchgehen und auf jede Zeile einen Befehl anwenden, etwa so:
#!/bin/bash
n=1
while read -r line; do
python entity_sentiment.py sentiment-entities-text "$line" > "$((n++)).json"
done < input.txt
Ich wüsste nicht, wie das exec entity_sentiment.py "$@"
hilfreich sein könnte.
Antwort2
Dank an die IRC-Bash-Community
#!/bin/bash
n=1
while read -u 3 -r line; do
echo $n "${line::30}"
python entity_sentiment.py sentiment-entities-text "$line" > "$((n++)).json"
((n++))
done 3< 10tweets.txt