スタックを検索しましたが、特定のCSVファイルでスタックしています。
2つの列でフォーマットされた大きなCSVファイルがあります。
Name Extension
Brian Aducci 6598
Jeff Alexander 6661
Sara Alfieri 6789
拡張子を残して、名前をユーザー名にトリミングしたい:
Name Extension
BAducci 6598
JAlexander 6661
SAlfieri 6789
この短い行はあなたが望むものを与えるはずです:
awk 'NR>1{$0=substr($1,0,1)$2" "$3}1' file
テスト
kent$ echo "Name Extension
Brian Aducci 6598
Jeff Alexander 6661
Sara Alfieri 6789"|awk 'NR>1{$0=substr($1,0,1)$2" "$3}1'
Name Extension
BAducci 6598
JAlexander 6661
SAlfieri 6789
2つではなく、「少なくとも3つ」の列であると仮定しましょう... firsname lastname extension
そして多分複数の名があります(これはたくさん起こります)
そして、次のように仮定しましょう。ログインは、1番目の列の最初の文字+ n-1番目の列(=名前)です。
あなたがするだろう:
gawk '(NR == 1) { print ; next ;} /./ { name=NF-1 ; print substr($1,1,1) $name " " $NF }' /the/file
あなたが持っている場合、これは動作します
Name Extension
firstname1 lastname1 extension1
firstname2a firsntname2b lastname2 extension2
...
(つまり、1つ以上の名の数に関係なく)(ただし、各フィールドを区切るスペースまたはタブの数は多くなります)
パートは、(NR == 1) { print ; next ; }
最初の(ヘッダー)行を「そのまま」、次に他の行の「次」に印刷することです。ヘッダーがない場合は、これを取り出すことができます。
他の行ではNR>1なので、2番目のパターン(/./
「行が空でない場合」を意味する)のみが適用され、必要なものが出力されます(:john john name1 name2のような奇妙な名前がある場合は変更しますが、まれなはずです)
gnu awk(またはnawk)'tolower'を使用して、何かを強制的に小文字にすることもできます。
gawk '(NR == 1) { print ; next ;} /./ { name=NF-1 ; print tolower(substr($1,1,1)) tolower($name) " " $NF }' /the/file
に変換Brian Aducci
する方法はありBAducci
ますか?
名の名と姓ですか?はいの場合、以下が機能するはずです。
{read x; echo $x; while read x y; do echo ${x:0:1}$y; done; } <large_file >output_file
sedメソッド:
sed -r '1!s/^(.)[^ ]* */\1/' large_file >output_file
これを試して
awk '{if( NR==1 ){print $1" "$2; next}}{a=substr($1,1,1); print a$2" "$3}' temp.txt
awkが私の選択です
awk 'NF>2{ for (i=1;i<NF -1;i++){ initials=initials substr($i,0,1) }; print initials $(NF-1), $NF}' x.txt
これは、フィールド数(NF)が2より大きいことを確認してから、フィールド1をループします。NF-1は、それぞれの最初の文字を取得して、それをイニシャル変数に入れます。次に、イニシャル、名前、拡張子を出力します。
これは実際には簡単ですsed
:
$ cat file
Name Extension
Brian Aducci 6598
Jeff Alexander 6661
Sara Alfieri 6789
$ sed -r '2,$s/(.)\w+\s+/\1/' file
Name Extension
BAducci 6598
JAlexander 6661
SAlfieri 6789
片道awk
:
$ awk 'NR>1{sub(/\w+\s+/,substr($0,1,1),$0)}1' file
Name Extension
BAducci 6598
JAlexander 6661
SAlfieri 6789
これは基本的にSudo_Oのsed
ソリューションと同じです。この種のものを使用する際の問題は、使用される機能を単にサポートしていないsed
バージョンが多数あることです。sed
(たとえば、正規表現で魔法のキャラクターに-r
するために使用される非標準のオプションです。多くの場合、は単にサポートを提供していません) +
sed
+
perl -pe 's/^(.)/\S*\s/$1/ if $. > 1' input-file