2017-07-18 136 views
1

我有一個CSV一些工程數據具有以下格式文件:如何使用awk,sed,cut,paste(Unix/Linux)來偏移CSV文件中的字段?

A1, B1 
C2, D2, E2 
F3, G3, H3 

我需要把這個文件轉換成以下CSV格式:

B1 
E2 
H3 

換句話說,保留行2和僅在第3欄上方;但是字段B1需要被移位/對齊到列3.

換句話說,C2,D2,F3和G3被丟棄。

有很多awk,sed,cutpaste移動,複製和粘貼整個列或行的解決方案。但我沒有找到任何解決方案,但這種自定義操作。

+2

請您澄清一下「僅保留第3列第2行以上」。似乎你只是想要每行的最後一個值,對嗎?如果是這樣,「awk」{print $ NF}'文件名'將做到這一點。這將是一個dup的https://stackoverflow.com/questions/17921544/get-last-field-using-awk-substr – flu

+0

小語法:在英語句子中,人稱代詞幾乎總是在那裏。這是因爲他們實際上在動詞末尾沒有後綴,所以他們必須使用人稱代詞來完成同樣的任務。如果你說「有一些工程數據」,它並不意味着「*我*有一些...」,但它的意思是「*你應該有*一些......」。因爲這句話看起來好像是一種阻礙形式。作爲交換,如果你的所有句子中都有「我」,那麼風格並不是那麼糟糕。 – peterh

+0

'字段B1需要移動/對齊到第3列。 換句話說,C2,D2,F3和G3被丟棄。'說'打印每行的最後一列'是一種非常奇怪的方式。如果這不是你的意思,那麼編輯你的問題來澄清。 –

回答

2

假設輸入文件是JNK

awk -F"," '{print $NF}' jnk 
+1

擺脫'-F'設置(或使其成爲'-F','')以避免在輸出中獲得前導空白字符。 –

0

感謝所有有用的建議。我終於有了以下的方法來工作,也許不是最有效率的工作。

\輸出第一4行第2列的到appendme.csv

AWK -F, 'NR> = 1 & & NR < = 4 {打印$ 2}' input.csv >> appendme.csv

\抓鬥到data1.csv

AWK -F有用柱, '{打印$ 3}' input.csv >> data1.csv

\刪除空行1-4輸出data2.csv

SED -e '1,4d' < data1.csv> data2.csv

\輸出DATA2內容到appendme.csv(單柱所以暗示未決追加到$ 1)

AWK -F,「{ print $ 1}'data2.csv >> appendme.csv