2017-08-29 119 views
-1

我需要替換大文件的頭中的日期。所以我有多個列頭,使用|(管)作爲分隔符,像這樣: A | B05 | 1 | xxc | 2018/06/29 | AC23 | SoOn替換一個大的.txt文件頭中的列--unix

所以我需要相同的標題,但與日期(第五列)更新:A | B05 | 1 | xxc | 2018/08/29 | AC23

對我有什麼解決方案?我用awk和sed嘗試過,但他們兩個都帶我比我更大的錯誤。我是新手,我真的很想理解這個解決方案。那麼你能幫我嗎?

+1

顯示您的工作和錯誤消息。 –

回答

0

您可以使用下面的命令,從每一行替換第5列與newdate變量的內容:

awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}{ $5 = newdate }1' infile > outfile 

說明

awk -v newdate="2018/08/29" ' # call awk, and set variable newdate 
    BEGIN{ 
      FS=OFS="|"   # set input and output field separator 
    } 
    { 
      $5 = newdate   # assign fifth field with a content of variable newdate 
    }1       # 1 at the end does default operation 
           # print current line/row/record, that is print $0 
    ' infile > outfile 

如果你想櫃面跳到第一線如果你有頭,然後使用FNR>1

awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}FNR>1{ $5 = newdate }1' infile > outfile 

如果你要替換第1行第5列才使用FNR==1

awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}FNR==1{ $5 = newdate }1' infile > outfile 

如果你仍然有問題,與樣品輸入和 預期輸出幀你的問題,從而使這將很容易解釋你的問題。

+1

這是可怕的。對我來說正確的解決方案是最後一個,並正常工作。非常感謝! – Light

0

SED溶液:

sed -Ei '1s~\|[0-9]{4}/[0-9]{2}/[0-9]{2}\|~|2018/08/29|~' file 
  • -i - 修改文件就地

  • 1s - 代替僅在第一(標題)線

  • [0-9]{4}/[0-9]{2}/[0-9]{2} - 日期模式

+0

你好,謝謝你的回答。當我使用你的解決方案時,我收到一條錯誤消息<< sed:1:「header.txt」:在h命令結尾的額外字符>> – Light

+0

@Light,它應該在Linux上工作。你在MacOS上嗎? – RomanPerekhrest

+0

是的,我在MacOs上做了一些測試 – Light