2017-02-22 5 views
1

Ich habe verschiedene Kombinationen der folgenden versucht: (. Ex foo bar ||| baz)Wie kann ich eine Textdatei Zeile für Zeile in zwei Textdateien durch Trennzeichen spalten?

awk -F" ||| " '{$0=$1}1' source_file.txt > column1.txt 
awk -F" ||| " '{$0=$1}2' source_file.txt > column2.txt 

oder

awk 'BEGIN {FS=" ||| ";}{print $1}' source_file.txt > column1.txt 
awk 'BEGIN {FS=" ||| ";}{print $2}' source_file.txt > column2.txt 

Anstelle der gewünschten Ausgabe, ich entweder die gesamte Linie bekommen oder ich nur die erste Wort (z. B. foo).

Wenn Sie hier um helfen möchten, ist eine Textbeispieldatei:

source_file.txt

foo bar ||| baz 
qux ||| quux 
corge grault ||| garply waldo 
fred ||| 
xyzzy ||| thud 

Und hier ist die gewünschte Ausgabe:

column1. txt

foo bar 
qux 
corge grault 
fred 
xyzzy 

column2.txt

bar 
quux 
garply waldo 

thud 

Antwort

4
awk -F' \\|\\|\\| ?' '{print $1 > "column1"; print $2 > "column2"}' file 

oder allgemeiner

awk -F' \\|\\|\\| ?' '{for(i=1;i<=NF;i++) print $i > "column"i}' file 
+0

Danke. Erhalten Sie diesen Fehler auch? 'awk: Syntaxfehler bei Quellzeile 1 Kontext ist \t {für (i = 1; i <= NF; i ++) drucken $ i> >>>" Spalte "i <<<} awk: illegale Anweisung an der Quelle Zeile 1' – Ryan

+1

Keine Fehler in meinem Fall, stellen Sie sicher, dass Sie einfache Anführungszeichen für das Skript verwenden. – karakfa

0

könnten Sie versuchen,

cat /tmp/a | tr -s '|' | cut -d'|' -f1 #for part 1 

cat /tmp/a | tr -s '|' | cut -d'|' -f2 | sed -E "s/^[[:space:]]+//g" #for part 2 

Die tr Flagge Trennzeichen zusammen quetscht.

Verwandte Themen