は、ここで入力(サンプル)されたフィールド:
cat foo | awk 'BEGIN{FS="|"} {print $2 " " $1}'
それは、フィールドの上にフィールド1を重ねることによって、出力を台無し2.
ヒント/ご提案はありますか?ありがとうございました。
は、ここで入力(サンプル)されたフィールド:
cat foo | awk 'BEGIN{FS="|"} {print $2 " " $1}'
それは、フィールドの上にフィールド1を重ねることによって、出力を台無し2.
ヒント/ご提案はありますか?ありがとうございました。
(DOSの行末の問題以外にも)一般的なヒントのカップル:
cat
がファイルを連結するためのものですが、それはファイルを読むことができる唯一のツールではありません!コマンドがファイルを読み取らない場合は、のようなリダイレクトを使用します。
あなたは-F
オプションを使用してフィールドセパレータを設定するので、代わりにすることができます
cat foo | awk 'BEGIN{FS="|"} {print $2 " " $1}'
試してみてください。
awk -F'|' '{print $2" "$1}' foo
この意志出力:
com.emailclient.account [email protected]
com.socialsite.auth.accoun [email protected]
を所望の出力を取得するにはあなたはいろいろなことをすることができます。 Iと思いますおそらくsplit()
2番目のフィールド:
awk -F'|' '{split($2,a,".");print toupper(substr(a[2],1,1)) substr(a[2],2),$1}' file
Emailclient [email protected]
Socialsite [email protected]
:最初の文字は大文字に変換最後に取得する
awk -F'|' '{split($2,a,".");print a[2]" "$1}' file
emailclient [email protected]
socialsite [email protected]
は、あなたが素敵でucfirst()
機能が組み込まれていないのでawk
の痛みのビットです
(あなたがサブプロセスをあきらめが)あなたはより簡潔な何かをしたい場合は、あなたが行うことができ:
awk -F'|' '{split($2,a,".");print a[2]" "$1}' file | sed 's/^./\U&/'
Emailclient [email protected]
Socialsite [email protected]
awkは問題ありません。私は、ファイルがWindowsシステムから来ていると推測していて、行末にCR(^ m ascii 0x0d)があります。
これにより、カーソルは$ 2の後の行の先頭に移動します。
CRを取り除くためにdos2unixまたはviを:se ff=unix
と一緒に使用してください。
は、フィールドセパレータとしてドットやパイプを使用します。
awk -v FS='[.|]' '{
printf "%s%s %s.%s\n", toupper(substr($4,1,1)), substr($4,2), $1, $2
}' << END
[email protected]|com.emailclient.account
[email protected]|com.socialsite.auth.account
END
います:
Emailclient [email protected]
Socialsite [email protected]
これは私の元々の考えでしたが、 '.co.uk'、' .cam.ac.uk'などはどうしても乱雑になりました。 –
たぶんあなたのファイルはCRLFターミネータが含まれています。
すべての行の後に\ r \ nが続きます。 awkは$ 2を実際に$ 2 \ rと認識します。 \ rは、行の先頭に移動することを意味します。
{print $ 2 \ r $ 1}は最初に$ 2を印刷し、頭に戻り、次に$ 1を印刷します。 フィールド2はフィールド1でオーバーレイされます。
ようこそスタックオーバーフロー、SleepyProgrammer!可能であれば詳細を追加することをお勧めします。この投稿はコメントのように見え、削除される可能性があります... – Badacadabra
ありがとうございました。 – Sazzy