1、遇到一个数据需要提取奇数列
[root@linuxprobe test]# cat test.txt
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030
031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060
[root@linuxprobe test]# seq -f %03g 60 | xargs -n 30 > test.txt
[root@linuxprobe test]# seq -f c%02g 30 | xargs |cat - test.txt > a && mv a test.txt
[root@linuxprobe test]# cat test.txt
c01 c02 c03 c04 c05 c06 c07 c08 c09 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030
031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060
2、测试程序 ,生成过度文件tmp.txt (奇数列的转置文件)
[root@linuxprobe test]# ls test.txt [root@linuxprobe test]# awk ‘{print NF}‘ test.txt | head -n 2 ##查看列数 30 30 [root@linuxprobe test]# for i in `seq 1 2 30`;do awk -v a=$i ‘{print $a }‘ test.txt|tr "\n" " "|sed ‘s/$/\n/‘ >> tmp.txt; done ###生成临时文件tmp.txt [root@linuxprobe test]# ls test.txt tmp.txt [root@linuxprobe test]# cat tmp.txt ##奇数列文件的转置文件 c01 001 031 c03 003 033 c05 005 035 c07 007 037 c09 009 039 c11 011 041 c13 013 043 c15 015 045 c17 017 047 c19 019 049 c21 021 051 c23 023 053 c25 025 055 c27 027 057 c29 029 059
3、对临时文件转置生成结果文件
[root@linuxprobe test]# awk ‘{print NF}‘ tmp.txt | head -n 2 ##查看列数
3
3
[root@linuxprobe test]# for i in `seq 3`;do cut -d " " -f $i tmp.txt | tr "\n" " " | sed ‘s/$/\n/‘ >> result.txt;done ##对临时文件转置,生成结果文件
[root@linuxprobe test]# cat result.txt
c01 c03 c05 c07 c09 c11 c13 c15 c17 c19 c21 c23 c25 c27 c29
001 003 005 007 009 011 013 015 017 019 021 023 025 027 029
031 033 035 037 039 041 043 045 047 049 051 053 055 057 059
已经提取奇数列结果文件。
程序慢,目前没找到更好的方法。