2014-07-05 41 views
-2

我想要刪除基於「CLIENT TOTAL」和後續單元行的行直到下一個名稱。
「CLIENT TOTAL」行之後的單元行數(即帶有30.0和15.0的行)可能不同,直到下一個名稱。 最重要的是該文件不分隔。 下面給出的是我的輸入文件。 INPUT:如何根據unix中的特定字段刪除行和填充

相對論/ OF 32629 DT MBSA
HALL 15.0 5850 HALL 30.0 21650 相對論/ OF 34145 DT MBSA
HALL 30.0 10850 * CLIENT TOTAL相對論/ OF 38350 30.0 32500 15.0 5850 PFIZER 96607 DT MBSA
HALL 15.0 32700 HALL 30.0 21300 PFIZER 96609 DT MBSA
HALL 60.0 30200 HALL 75.0 182100 HALL 90.0 67700 *客戶端總PFIZER 334000 90.0 67700 30.0 21300 15.0 32700

我想下面我的輸出。
OUTPUT:

相對論/ OF 32629 DT MBSA
HALL 15.0 5850 HALL 30.0 21650 相對論/ OF 34145 DT MBSA
HALL 30.0 10850 PFIZER 96607 DT MBSA
HALL 15.0 32700 HALL 30.0 21300 PFIZER 96609 DT MBSA
HALL 60.0 30,200 HALL 75.0 182,100 HALL 90.0 67,700

+0

你真的想要那個中間輸出/輸入文件,或者你只是想將上面的第一個輸入文件轉換爲最後一個輸出文件嗎? –

+0

我想爲我的第一個INPUT輸入最後一個輸出。 –

+0

那麼爲什麼不清理你的問題,以表明閱讀它的人不會浪費時間? –

回答

1

通過AWK,

$ awk '$1=="-----"{x=0} NF==1{x=1}x' file 
34567 
20.0 5,678 
20.0 5,678 
20.0 5,678 
20.0 5,678 
20.0 5,678 
78545 
20.0 41,424 
20.0 41,424 
30.0 41,424 

它將跳過包含-----在列1高達其中整個線$0相當於第1列$1行的行。

更新:

$ awk 'NF==1{print; var=$1}NF==2{print var" "$2}' file 
34567 
34567 5,678 
34567 5,678 
34567 5,678 
34567 5,678 
34567 5,678 
78545 
78545 41,424 
78545 41,424 
78545 41,424 
+0

'$ 0 == $ $ 1'是一種奇怪的方式來測試是否只有一個字段。 'NF == 1'會更自然。如果'$ 1'包含'3'和'$ 2'包含'0'? Awk可能會做一個數字比較,然後'$ 0 == $ 1'即使有2個字段也是如此。 –

+1

謝謝@Ed更新。 –

+0

謝謝@Avinash拉傑....真的你真棒....再次感謝很多:) –

0
$ cat tst.awk 
BEGIN{ FS=OFS="\t" } 
/^[[:digit:]]+[[:space:]]*$/ { id = $1; inRec = 1 } 
/^-/ { inRec = 0 } 
inRec { print id, $2 } 

$ awk -f tst.awk file 
25333 
98275 
98275 68,000 
98275 149,000 
98275 41,000 
98275 
98275 22,000 
98275 162,000 
25333 
31932 
31932 334,000 
31932 
31932 53,000 
31932 47,000 
+0

'$'是一個提示符。 'tst.awk'是一個文件,它包含一個以'BEGIN'開頭並以'$ 2}'結尾的awk腳本。 'cat tst.awk'是一個執行命令來查看文件'tst.awk'的內容。請閱讀Chris Johnson撰寫的「Shell Scripting Recipes」一書,以瞭解shell編程的基礎知識。 –

+0

恩埃德...感謝您提出這本書,因爲我是新來的unix ...此外代碼返回錯誤的輸出,我沒有得到上述輸出...它只是返回field1值和field2爲空... –

+0

該腳本不可能打印字段1的值。或者你的輸入文件不像你所描述的那樣(cat -v顯示任何控制字符),或者你在複製/粘貼腳本時做錯了事,或者你的awk壞了(你在操作系統上和'awk --version'輸出是什麼),或者你調用的不正確。除此之外,做一些明顯的事情,並開始在腳本中添加調試打印語句來找出錯誤。如果您的輸入文件按照您的說法進行格式化,並且您具有功能awk,那麼該腳本將生成所需的輸出,如上所示。 –