我正在编写一个shell脚本来执行以下任务。 我有这样一个文件:
abcdfgfehg 124353552455
ldnaslbbdaj 134314314344
sdsdbbdbu 134134134314
auosdbo 141413434444
ihjidiqwdnowqdn 134134141232
我希望输出文件是
abcdfgfeh 124353552455
ldnaslbbd 134314314344
sdsdbbdbu 134134134314
auosdbo 141413434444
ihjidiqwd 134134141232
也就是说,所有名称(每行中的第一个单词)应减少为9个字符并修剪剩余的字符。之后的空间。然后是名称的值。
我知道awk命令打印出evry line的第一个单词。
awk '{print $1}' ./input.txt
但是如何修剪文件中的字符,使每个单词的长度为9,其值在空格后开始。
答案 0 :(得分:1)
一个简单的printf会做 -
awk '{printf ("%-10.9s%s\n", $1,$2)}' file
<强>测试强>
[jaypal:~/Temp] awk '{printf ("%-10.9s%s\n", $1,$2)}' file
abcdfgfeh 124353552455
ldnaslbbd 134314314344
sdsdbbdbu 134134134314
auosdbo 141413434444
ihjidiqwd 134134141232
测试2:
[jaypal:~/Temp] cat file
abcdfgfehg 1243535ABCD55
ldnaslbbdaj 134314314344
sdsdbbdbu 134134134314
auosdbo 141413434444
ihjidiqwdnowqdn 134134141232
[jaypal:~/Temp] awk '{printf ("%-10.9s%s\n", $1,$2)}' file
abcdfgfeh 1243535ABCD55
ldnaslbbd 134314314344
sdsdbbdbu 134134134314
auosdbo 141413434444
ihjidiqwd 134134141232
答案 1 :(得分:0)
您不必使用子字符串。
[srikanth@myhost ~]$ cat sample.txt
abcdfgfehg 124353552455
ldnaslbbdaj 134314314344
sdsdbbdbu 134134134314
auosdbo 141413434444
ihjidiqwdnowqdn 134134141232
[srikanth@myhost ~]$ awk '{ printf("%-.9s %s\n", $1, $2); }' sample.txt
abcdfgfeh 124353552455
ldnaslbbd 134314314344
sdsdbbdbu 134134134314
auosdbo 141413434444
ihjidiqwd 134134141232
请看看@Jaypal的回答。您可以使用printf处理宽度和精度。
答案 2 :(得分:0)
> awk '{print substr($1,1,9),$2}' temp
abcdfgfeh 124353552455
ldnaslbbd 134314314344
sdsdbbdbu 134134134314
auosdbo 141413434444
ihjidiqwd 134134141232