【发布时间】:2022-08-04 16:49:02
【问题描述】:
我有一个文件,而我想在特定条件下从行转换为列。
输入文件:
cat f
\"0/35\",\"0eij8401c
\"0/35\",\"59ij41015
\"0/35\",\"21ij3e01c
\"0/35\",\"dbije401b
\"1/35\",\"dbij8a015
\"1/35\",\"67ijb9011
\"1/35\",\"b5ije001b
\"1/35\",\"bdij3701d
\"2/35\",\"abij3b011
\"2/35\",\"7fij70018
\"2/35\",\"77ijf9010
\"2/35\",\"e5ij64015
\"3/35\",\"59ij41015
\"3/35\",\"f6ijae01e
\"3/35\",\"c4ij5801c
\"3/35\",\"dbij98012
\"4/35\",\"edij6801e
\"4/35\",\"pdij6801e
\"4/35\",\"kdij6801e
\"4/35\",\"8cij57018
预期输出:
0eij8401c
dbij8a015
abij3b011
59ij41015
edij6801e
59ij41015
67ijb9011
7fij70018
f6ijae01e
pdij6801e
21ij3e01c
b5ije001b
77ijf9010
c4ij5801c
kdij6801e
dbije401b
bdij3701d
e5ij64015
dbij98012
8cij57018
我尝试了 awk 和 paste 的组合,试图用 awk 命令实现两者。 这就是我尝试的 -
cat f | awk -v batchNo=1 -v Num=4 \'{print $1 > \"batch_\" batchNo \".txt\";if(NR%Num==0) {batchNo++}}\'
生成 5 个文件,如下所示 -
ls batch_*
batch_1.txt batch_2.txt batch_3.txt batch_4.txt batch_5.txt
然后与下面的粘贴结合 -
paste batch_1.txt batch_2.txt batch_3.txt batch_4.txt batch_5.txt
\"0eij8401c \"dbij8a015 \"abij3b011 \"59ij41015 \"edij6801e
\"59ij41015 \"67ijb9011 \"7fij70018 \"f6ijae01e \"pdij6801e
\"21ij3e01c \"b5ije001b \"77ijf9010 \"c4ij5801c \"kdij6801e
\"dbije401b \"bdij3701d \"e5ij64015 \"dbij98012 \"8cij57018
我也尝试过这样的事情来获得想要的结果,但没有得到它。
awk \'{a[$1]++; b[$2]++;c[$3]++;d[$4]++;e[$5]++} END {for (k in a) print k > \"out.txt\"; for (j in b) print j > \"out.txt\";for (k in c) print j > \"out.txt\";for(l in d) print l> \"out.txt\"; for (m in e) print m> \"out.txt\";}\' batch_*
请有任何建议。
标签: awk