簡體   English   中英

從文件中以bash打印n到n列

[英]print n to n columns in bash from a file

我有成千上萬的空格分隔的列。 我想做類似的事情

awk '{print$1" "$2}' file

但是我需要打印一個范圍並保持它們之間的間距。

例如,我有一個包含內容的文件:

1.006 2.0101 1.002 3.005 0.0000 4.09873 9.0009 1000.678 15.0 0.9999 11.8
78.003 9.411 0.000 0.003 20000.0100 1.03 9.00029 100.0 0.5 123.9 1.800

我想打印第2-3和6-9列,我會得到:

2.0101 1.002 4.09873 9.0009 1000.678 15.0
9.411 0.000 1.03 9.00029 100.0 0.5

我對其他工具持開放態度,但這似乎是awk中的一個好工具。

如果每個字段之間有一個空格,則cut是適合該作業的工具:

cut -d' ' -f 2-3,6-9 file

實際上, cut是正確的工具,當前上下文是處理工作的最佳方法,但是仍然需要awk ,您可以嘗試如下操作:

$ cat ext_f.awk 
function ext_field(s,e, r,i)
{   if(e > s)
    {
        for(i=s; i<=e; i++)r = i > s ? r OFS $i : $i;
    }else{
        if(s!="")return $s
    }
    return r
}
{ print ext_field(2,3), ext_field(6,9) }

執行:

輸入:

$ cat file
1.006 2.0101 1.002 3.005 0.0000 4.09873 9.0009 1000.678 15.0 0.9999 11.8
78.003 9.411 0.000 0.003 20000.0100 1.03 9.00029 100.0 0.5 123.9 1.800

輸出:

$ awk -f ext_f.awk file
2.0101 1.002 4.09873 9.0009 1000.678 15.0
9.411 0.000 1.03 9.00029 100.0 0.5

假設如果需要逗號或其他字符作為輸出分隔符,則可以如下所示修改-v OFS=

$ awk -v OFS="," -f ext_f.awk file
2.0101,1.002,4.09873,9.0009,1000.678,15.0
9.411,0.000,1.03,9.00029,100.0,0.5

如果您有gawk則只需從ext_f.awk刪除以下ext_f.awk ,然后使用--source選項

{ print ext_field(2,3), ext_field(6,9) }

范例:

$ awk -v OFS="," -f ext_f.awk --source '{print ext_field(1,2)}' file
1.006,2.0101
78.003,9.411

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM