簡體   English   中英

Awk:打印未確定數量的列

[英]Awk: printing undetermined number of columns

我有一個文件,其中包含由制表符分隔的許多字段。 我正在嘗試打印除第一列之外的所有列,但是想要使用AWK僅在列中打印它們。 文件的格式是

col 1   col 2   ... col n

一行中至少有兩列。

樣品

2012029754      901749095
2012028240      901744459       258789
2012024782      901735922
2012026032      901738573       257784
2012027260      901742004
2003062290      901738925       257813  257822
2012026806      901741040
2012024252      901733947       257493
2012024365      901733700
2012030848      901751693       260720  260956  264843  264844

因此,我想告訴awk將列2打印到n列大於2的n而不打印空白行,如果該行的列n中沒有信息,則所有列都在一列中,如下所示。

901749095
901744459
258789
901735922
901738573
257784
901742004
901738925
257813
257822
901741040
901733947
257493
901733700
901751693
260720
260956
264843
264844

這是我第一次使用awk,所以請耐心等待。 我從命令行寫了這個:

awk '{i=2; 
while ($i ~ /[0-9]+/)
{ 
    printf "%s\n", $i
    i++
}
}' bth.data

這更像是一個尋求批准,而不是問一個問題,這是在AWK中做這樣的事情的正確方法,還是有更好/更短的方式。

請注意,實際輸入文件可能是數百萬行。

謝謝

這是你想要的輸出嗎?

awk '{for(i=2; i<=NF; i++) print $i}' bth.data

901749095
901744459
258789
901735922
901738573
257784
901742004
901738925
257813
257822
901741040
901733947
257493
901733700
901751693
260720
260956
264843
264844

NF是幾個預定義的awk變量之一 它表示給定輸入行上的字段數。 例如,如果要始終打印行print $NF的最后一個字段,則非常有用。 或者當然,如果您想迭代給定行上的全部或部分字段到行尾。

好像awk是錯誤的工具。 我會做:

cut -f 2- < bth.data | tr -s '\t' '\n'

請注意,使用-s ,這可以避免打印空白行,如原始問題中所述。

暫無
暫無

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

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