1

スタックを検索しましたが、特定のCSVファイルでスタックしています。

2つの列でフォーマットされた大きなCSVファイルがあります。

Name    Extension
Brian Aducci    6598
Jeff Alexander  6661
Sara Alfieri    6789

拡張子を残して、名前をユーザー名にトリミングしたい:

Name    Extension
BAducci 6598
JAlexander 6661
SAlfieri 6789
4

7 に答える 7

1

この短い行はあなたが望むものを与えるはずです:

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
于 2013-01-18T16:54:23.730 に答える
0

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
于 2013-01-18T16:46:04.653 に答える
0

に変換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
于 2013-01-18T16:46:37.327 に答える
0

これを試して

awk '{if( NR==1 ){print $1" "$2; next}}{a=substr($1,1,1); print a$2" "$3}' temp.txt

于 2013-01-18T16:50:18.727 に答える
0

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は、それぞれの最初の文字を取得して、それをイニシャル変数に入れます。次に、イニシャル、名前、拡張子を出力します。

于 2013-01-18T16:52:32.827 に答える
0

これは実際には簡単です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
于 2013-01-18T17:00:28.880 に答える
0

これは基本的にSudo_Oのsedソリューションと同じです。この種のものを使用する際の問題は、使用される機能を単にサポートしていないsedバージョンが多数あることです。sed(たとえば、正規表現で魔法のキャラクターに-rするために使用される非標準のオプションです。多くの場合、は単にサポートを提供していません) +sed+

perl -pe 's/^(.)/\S*\s/$1/ if $. > 1' input-file
于 2013-01-18T20:49:29.407 に答える