2016-12-04 105 views
4

我需要打印一個文件的內容,併爲每一列賦予一個標題,留下足夠的空間以便讀取,然後我需要將其輸出到一個新文件中。我遵循這個教程很長一段時間,但我已經陷入困境。Linux Awk幫助代碼

http://www.thegeekstuff.com/2010/01/awk-introduction-tutorial-7-awk-print-examples

這是他們所使用的示例代碼,這將使我正是我需要用我做的。但是當我調整它時它不起作用。

$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";} 
{print $2,"\t",$3,"\t",$4,"\t",$NF;} 
END{print "Report Generated\n--------------"; 
}' employee.txt 

這是我的,不像這個例子,我想打印整個文檔,並不真正想要這個「報告生成」廢話下。我試着在結束後添加{print;}',並確保開始一個新行,並且......什麼也不做。

$ awk 'BEGIN {Print "Firstname\tLastname\tPoints";} END > awktest.txt > done 

我哪裏出錯了?它不斷給我的反應源線2

+0

您正在錯失報價;如果你不想在文件末尾做任何事情,你不需要'END'地址; '> awktest.txt> done'部分沒什麼意義。 – mustaccio

+0

沒有關閉'''。我假設你的shell正在等待你輸入你在'awk'之後開始的字符串的其餘部分,然後'''。 – melpomene

+0

編寫awk教程的人需要參加awk教程。忽略它,它充滿了無稽之談,並會讓你走錯了路。閱讀Arnold Robbins編寫的「有效的Awk編程」第4版。 –

回答

1

要刪除的footline,剛剛輟學任何從開始至結束的結束「:

awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";} {print $2,"\t",$3,"\t",$4,"\t",$NF;}' employee.txt 

在你的第二個例子,你離開了結束的」,我懷疑你把一個「>」比需要的多一個:「

awk 'BEGIN {print "Firstname\tLastname\tPoints";}' awktest.txt > done 

後面的例子會默默地忽略從」awktest.txt「中讀取的所有內容。

+0

這隻會打印標題,而不是數據。 – e0k

+0

@ e0k哪一個?第一個例子,或第二個已經說過會忽略輸入文件的例子? – melpomene

+0

是的,第二個(沒有每個記錄子句並且只有一個'BEGIN'子句的)不會列出任何數據,但是它確實表明了這一點。您可能希望在'BEGIN'子句中使用'OFS =「\ t」',而不必在'print'語句中列出所有''\ t「'。 – e0k

0

看來你已經錯過了的列和源文件的實際打印,還我讀了你不需要任何最終行動...

awk 'BEGIN {Print "Firstname\tLastname\tPoints";} END > awktest.txt > done` 

應該是...

awk 'BEGIN {Print "Firstname\tLastname\tPoints";}{print $1,"\t",$2,"\t",$3;}' source_file.txt > awktest.txt` 

只要記住要將$ 1,$ 2,$ 3更改爲您需要的源文件上的哪些列。

僅供參考。我不是專家,只是讀了TUTS :)

0

看起來你需要的只是插入一個標題行,它可以很容易地與sed做了什麼(以及awk)或cat

$ sed '1iFirstname\tLastname\tPoints' file > output.file 

$ awk 'BEGIN{print "Firstname\tLastname\tPoints"} 1' file > output.file 

$ cat <(echo -e "Firstname\tLastname\tPoints") file > output.file 
0

awk打印功能被命名爲print,而不是Print。 idk爲什麼所有解決方案都在其打印報表中包含,"\t",。你不希望這樣 - 你想在腳本開始時設置-v OFS='\t',然後在字段之間使用,。所有你想要的是:

awk -v OFS='\t' ' 
BEGIN {print "Name", "Designation", "Department", "Salary"} 
{print $2, $3, $4, $NF} 
}' employee.txt 

假設這些是你想從你的數據打印的正確的字段號碼。您問題中的示例輸入/輸出對幫助我們回答它非常有用。