TL; DR - 我有一個變量,看起來像格式說明符($ TEMP),我需要使用awk printf。awk自定義printf命令生成
因此,通過這樣做:
awk '-v foo="$temp" {....{printf foo} else {print $_}}' tempfile1.txt > tmp && mv tmp tempfile1.txt
猛砸應該看到這一點:
awk '{.....{printf "%-5s %-6s %...\n", $1, $2, $3....} else {print $_}}' tempfile1.txt > tmp && mv tmp tempfile1.txt
樣品輸入:
col1 col2 col3
aourwyo5637[dfs] 67tyd 8746.0000
tomsd - 4
o938743[34* 0 834.92
.
.
.
預期輸出:
col1 col2 col3
aourwyo5637[dfs] 67tyd 8746.0000
tomsd - 4
o938743[34* 0646sggg 834.92
.
.
.
長版
我是新手腳本,經過5個多小時的互聯網衝浪,做了我認爲是拼湊的信息,我碰到了一堵磚牆。
場景:
所以,我有我需要在目錄中打開多個隨機表。由於我不知道任何關於給定的表格,除了我需要格式化所有在第4行的數據和文件的第14行之後的所有行。
我需要在awk中快速創建一個自定義的printf命令,這樣每列的填充等於一個值(比如說5個空格),所以一旦我打開它,表格看起來很漂亮。
這是我想出迄今:
awk '{
for (i=1;i<=NF;i++)
{
max_length=length($i);
if (max_length > linesize[i])
{
linesize[i]=max_length+5;
}
}}
END{
for (i = 1; i<=length(linesize); i++)
{
print linesize[i] >> "tempfile1.txt"
}
}' file1.txt
# remove all blank lines in tempfile1.txt
awk 'NF' tempfile1.txt > tmp && mv tmp tempfile1.txt
# Get number of entries in tempfile1.txt
n=`awk 'END {print NR}' tempfile1.txt`
# This for loop generates the pattern I need for the printf command
declare -a a
for((i=0;i<$n;i++))
do
a[i]=`awk -v i=$((i+1)) 'FNR == i {print}' tempfile1.txt`
temp+=%-${a[i]}s' '
temp2+='$'$((i+1))', '
#echo "${a[$i]}";
#echo "$sub"
done
temp='"'${temp::-2}'\n", '
# echo "$temp"
temp=$temp${temp2::-2}''
# echo "$temp"
awk <something here>
# Tried the one below and it gave an error
awk -v tem="$temp" '{printf {tem}}
所以最好我想什麼是awk命令是簡單地把bash的變量temp awk命令看起來像這樣。
因此,通過這樣做:
awk '-v foo="$temp" {if(FNR >=14 || FNR == 4) {printf foo} else {print $_}}' tempfile1.txt > tmp && mv tmp tempfile1.txt
猛砸應該看到這一點:
awk '{if(FNR >=14 || FNR == 4) {printf "%-5s %-6s %...\n", $1, $2, $3....} else {print $_}}' tempfile1.txt > tmp && mv tmp tempfile1.txt
編輯您的問題以包含示例輸入和預期輸出,以便我們可以開始幫助您。閱讀由Arnold Robbins撰寫的第4版有效Awk編程(Effective Awk Programming)一書,與通過使用單個搜索結構來學習awk相比,您將浪費的時間要少得多。 –
@EdMorton:會查找你提到的那本書。 –
您似乎在重新創建'column -t filename' –