2017-07-03 57 views
1

我有一個包含一個txt文件中的當前列值如何打印附加行。 「,」用於分隔數據。基於使用AWK

結果將是這樣的:

adf8261:21:09:07 BAT SYNTAX_fa TRUE 273e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 218e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 136e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 82e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 82e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 27e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 0 
qwe8261:21:09:10 BAT SYNTAX_fa TRUE 54e-9 
qwe8261:21:09:10 BAT SYNTAX_fa TRUE 27e-9 
qwe8261:21:09:10 BAT SYNTAX_fa TRUE 0 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 27e-9 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 27e-9 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 27e-9 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 0 
+0

你爲自己嘗試了什麼? – Inian

回答

1

AWK溶液:

awk -F'[[:space:]]+|,' '{ for(i=5;i<=NF;i++) print $1,$2,$3,$4,$i }' file 
  • -F'[[:space:]]+|,' - 空白和逗號被視爲字段分隔

  • for(i=5;i<=NF;i++) - 迭代雖然項目第5場的

輸出:

adf8261:21:09:07 BAT SYNTAX_fa TRUE 273e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 218e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 136e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 82e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 82e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 27e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 0 
qwe8261:21:09:10 BAT SYNTAX_fa TRUE 54e-9 
qwe8261:21:09:10 BAT SYNTAX_fa TRUE 27e-9 
qwe8261:21:09:10 BAT SYNTAX_fa TRUE 0 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 27e-9 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 27e-9 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 27e-9 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 0 
+0

非常感謝你@RomanPerekhrest。這項工作很棒! – terence

+0

@terence,不客氣 – RomanPerekhrest

1

另在AWK使用split

$ awk '{split($5,a,",");for(i in a) print $1,$2,$3,$4,a[i]}' file 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 82e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 82e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 27e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 0 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 273e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 218e-9 
adf8261:21:09:07 BAT SYNTAX_fa TRUE 136e-9 
qwe8261:21:09:10 BAT SYNTAX_fa TRUE 54e-9 
qwe8261:21:09:10 BAT SYNTAX_fa TRUE 27e-9 
qwe8261:21:09:10 BAT SYNTAX_fa TRUE 0 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 0 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 27e-9 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 27e-9 
oiu8261:21:09:08 BAT SYNTAX_fa TRUE 27e-9 

輸出會在適當的隨機順序到for(i in a)。這可以固定:

... n=split($5,a,","); for(i=1;i<=n;i++) print ... 
+1

也可以用'split($ 5,a,「,」)來修復。 for(i = 1; i in a; i ++)' –

0

嘗試多途徑這裏,我正考慮該字符串「TRUE」存在到每行你的INPUT_FILE。

awk -F'TRUE[^0-9]*|,' '{for(i=2;i<=NF;i++){print $1,"TRUE",$i}}' Input_file 

說明:簡單地使域分隔爲字符串TRUE,直到第一個數字開始或逗號作爲字段分隔符(這樣既分隔域將只按INPUT_FILE)。然後我通過for循環遍歷第二個字段的字段到字段的總數。現在將第一個字段與字符串TRUE一起打印,然後打印字段的值。最後提到Input_file。