我想awk一個數據文件列表。所有記錄 - 之前 - 之前存在未知數量的記錄,例如,awk:重新格式化數據文件列表中的日期(批量編輯)
/10-12-2014 06:47:59/{p=1}
將被跳過。
一個數據文件的簡要模板看起來像這樣:
data_file_001
0; n records to be skipped
1;10-12-2014 06:47:59;
2;12-12-2014 10:17:44;
3;12-12-2014 10:37:44;
4;14-12-2014 10:00:32;
5;;movefield
6;16-12-2014 04:15:39;
所需輸出($ 2的DateField重新格式化和$ 3都移動到4 $):
colnum;date;col3;col4;col5
2;12.12.14;;
3;12.12.14;;
4;14.12.14;;
5;;;movefield;moved
6;16.12.14;;
我的源文件目前是這樣:
BEGIN { OFS=FS=";" ; print "colnum;date;col3;col4;col5"}
FNR == 1 { p=0 }
$3 == "movefield" { $4 = $3; $5 = "moved"; $3 = ""}
#(x=index($2," ") > 0) {DDMMYY = substr($2,1,x-1)}
$2=substr($2,1,11)
p!=0{print};
/10-12-2014 06:47:59/{p=1}
我有問題重新格式化數據字段:pattern-action(x = index($ 2,「」)> 0){DDMMYY = substr($ 2,1,x-1)}不起作用,$ 2 = substr( $ 2,1,11)與移動場行動相結合。注意移動字段出現的記錄沒有日期字段。
請記住,awk是用於一堆文件(循環)。
精彩!你也喜歡 - 進入。在日期欄中。我忘了提及這一點,而我在'循環'嘗試中遇到了問題。我不知道就地'功能',並將不得不在手冊中查找它。 FNR需要改進== 1 {next}我認爲。我有循環,因爲在我需要處理之前,數據文件中有未知數量的記錄。例如,我給出了某些日期/ 10-12-2014 06:47:59/{p = 1} – colt
因此,「2014年10月12日06:47:59」之前的所有記錄都需要跳過。 – colt
我無法使用上面的代碼。我使用gawk和Windows shell。我不知道如何按照給定的方式輸入程序代碼。看來我必須像使用手冊一樣使用它:awk -f program.awk文件* .csv但是我不知道如何用-i inplace調用它。它給了我錯誤。 – colt