2012-01-03 14 views
3

次のタスクを実行するシェルスクリプトを作成しています。各行の最初の単語から特定の長さの後に文字を切り取るシェルスクリプト

abcdfgfehg 124353552455 
ldnaslbbdaj 134314314344 
sdsdbbdbu 134134134314 
auosdbo 141413434444 
ihjidiqwdnowqdn 134134141232 

は、私は、出力ファイルには9つの文字と残りに削減しなければならない、すべての名前(すべての行では第一単語)である

abcdfgfeh 124353552455 
ldnaslbbd 134314314344 
sdsdbbdbu 134134134314 
auosdbo 141413434444 
ihjidiqwd 134134141232 

になりたい: 私はこのようなファイルを持っています文字が切り取られます。その後のスペース。名前の値を入力します。

私はawkコマンドがevry行の最初の単語を出力することを知っています。

awk '{print $1}' ./input.txt 

しかし、どのように各単語はスペースの後に長さ9とその値の開始であるようにファイルから文字をトリミングします。

シンプルなprintfのはどうしたら

答えて

1

-

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 
+0

感謝を。それはうまくいった。しかし、もし私が12324の代わりにABCDのような値を持っていれば、それは0をプリントします。 –

+0

心配しないで '%d'の代わりに'%s'を使ってください(私は答えを更新しました)、2番目の列に数字の代わりに 'ABCD'があれば処理できます。 –

+0

あなたはようこそ。:) –

0

あなたは部分文字列を使用する必要はありません。

[[email protected] ~]$ cat sample.txt 
abcdfgfehg 124353552455 
ldnaslbbdaj 134314314344 
sdsdbbdbu 134134134314 
auosdbo 141413434444 
ihjidiqwdnowqdn 134134141232 

[[email protected] ~]$ awk '{ printf("%-.9s %s\n", $1, $2); }' sample.txt 
abcdfgfeh 124353552455 
ldnaslbbd 134314314344 
sdsdbbdbu 134134134314 
auosdbo 141413434444 
ihjidiqwd 134134141232 

@ Jaypalの回答をご覧ください。 printfで幅と精度を扱うことができます。

+0

'printf'で' width'と 'precision'を使ってインデントを処理できます。 –

+0

@JaypalSingh:はい、あなたの答えを見て、それから計算しました。私は私の答えをもう一度変えると、あなたの答えをコピーするようなものだと思った。だから、私はそれをそのまま残しました。 –

0
> awk '{print substr($1,1,9),$2}' temp 
abcdfgfeh 124353552455 
ldnaslbbd 134314314344 
sdsdbbdbu 134134134314 
auosdbo 141413434444 
ihjidiqwd 134134141232 
0

これはあなたのために働くかもしれない:

sed 's/\S /&   /g;s/\(.\{9\}\)\S*\s*/\1 /' file 
abcdfgfeh 124353552455 
ldnaslbbd 134314314344 
sdsdbbdbu 134134134314 
auosdbo 141413434444 
ihjidiqwd 134134141232 
関連する問題