我有一个文本文件,其中包含我需要以下列形式提取的信息:
code1 something1 code2 something2 code3 something3
code4 something4 code5 something5 code6 something6
...
我想将其提取为两个单独的文档:
code1
code2
code3
code4
...
和
something1
something2
something3
something4
...
请注意,必须订购。使用例如cat mydocument | awk '{print $1 $3}'
输出
code1code2
code4code5
...
答案 0 :(得分:3)
将第1,3,5,7列等写入文件code.txt和第2,4,6,8列,依此类推文件.txt:
awk '{for (i=1; i<=NF; i=i+2) print $i}' input.txt > code.txt
awk '{for (i=2; i<=NF; i=i+2) print $i}' input.txt > something.txt
答案 1 :(得分:2)
鉴于您目前所发布的内容,您需要的是(使用GNU awk进行多字符RS):
awk -v RS='[[:space:]]+' '{print > (NR%2?"foo":"bar")}' file
如果您不是全部,那么请将问题编辑为更清楚。
答案 2 :(得分:0)
您可以多次使用print
在不同的行中输出所有相关字段:
awk '{print $1; print $3; print $5}' input_file > fields1_3_and_5
awk '{print $2; print $4; print $6}' input_file > fields2_4_and_6
如果你的帖子似乎显示输入文件中有空行,你可以检查字段数,以避免在输出文件中输入它们:
awk 'NF==6{print $1; print $3; print $5}' input_file > fields1_3_and_5
awk 'NF==6{print $2; print $4; print $6}' input_file > fields2_4_and_6
答案 3 :(得分:0)
如果您不是全部,那么请更新您的问题,以显示更具真实代表性的样本输入和预期输出。
<强>输入强>
$ cat f
code1 something1 code2 something2 code3 something3
code4 something4 code5 something5 code6 something6
<强>输出强>
$ awk 'NF{for(i=1; i<=NF; i++)print $i >(i%2?"code.txt":"something.txt")}' f
$ cat code.txt
code1
code2
code3
code4
code5
code6
$ cat something.txt
something1
something2
something3
something4
something5
something6
答案 4 :(得分:0)
试试这个 -
awk '{for (i=1; i<=NF;i++) if(i%2!=0) {print $i > "code.txt"} else{print $i > "col.txt"}}' column.txt
在这里你可以看到两个文件的输出 -
paste code.txt col.txt
code1 something1
code2 something2
code3 something3
code4 something4
code5 something5
code6 something6
答案 5 :(得分:0)
@DIX:尝试:另一种不同的方法,没有循环等,也可以帮助你,我在考虑你的Input_file中没有空行。
awk '{print > (NR%2==0?"even_file_output":"odd_file_output")}' RS='[ |\n]' Input_file
答案 6 :(得分:0)
您要求awk
,其他解决方案也可以。
当所有行都具有偶数nr个字段时,您可以执行
grep -Eo "[^ ]+ [^ ]+" input.txt | cut -d" " -f1 > oddfields.txt
grep -Eo "[^ ]+ [^ ]+" input.txt | cut -d" " -f2 > evenfields.txt
或使用sed
sed 's/ *\([^ ]\+\) [^ ]\+/\1\n/g' input.txt > oddfields.txt
sed 's/ *[^ ]\+ \([^ ]\+\)/\1\n/g' input.txt > evenfields.txt