如何通过分隔列逐行将文本文件拆分为2个文本文件?

时间:2017-02-22 01:06:51

标签: linux awk sed text-manipulation

我尝试了以下各种组合:

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

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

取代所需的输出,我要么得到整行(例如foo bar ||| baz),要么只得到第一个词(例如foo)。

如果您想提供帮助,请参阅示例文本文件:

source_file.txt

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

这是所需的输出:

column1.txt

foo bar
qux
corge grault
fred
xyzzy

column2.txt

bar
quux
garply waldo

thud

2 个答案:

答案 0 :(得分:4)

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

或更一般地

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

答案 1 :(得分:0)

你可以尝试

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

tr标志一起挤压分隔符。