2013-03-24 4 views
21

は、ここで入力(サンプル)されたフィールド:

cat foo | awk 'BEGIN{FS="|"} {print $2 " " $1}' 

それは、フィールドの上にフィールド1を重ねることによって、出力を台無し2.

ヒント/ご提案はありますか?ありがとうございました。

答えて

41

(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] 
+2

ありがとうございました。 – Sazzy

1

awkは問題ありません。私は、ファイルがWindowsシステムから来ていると推測していて、行末にCR(^ m ascii 0x0d)があります。

これにより、カーソルは$ 2の後の行の先頭に移動します。

CRを取り除くためにdos2unixまたはviを:se ff=unixと一緒に使用してください。

+0

各行は0x0d0aで終わります。これらの16進数値を切り詰めると問題が解決しますか? Thx – Sazzy

+0

0aはOKです。ちょうど0dを取り除きます – parkydr

+0

ありがとう!パイプに次のコードを追加すると、問題が分類されました。 sedの/ \ x0d // g '| – Sazzy

3

は、フィールドセパレータとしてドットやパイプを使用します。

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] 
+2

これは私の元々の考えでしたが、 '.co.uk'、' .cam.ac.uk'などはどうしても乱雑になりました。 –

0

たぶんあなたのファイルはCRLFターミネータが含まれています。

すべての行の後に\ r \ nが続きます。 awkは$ 2を実際に$ 2 \ rと認識します。 \ rは、行の先頭に移動することを意味します。

{print $ 2 \ r $ 1}は最初に$ 2を印刷し、頭に戻り、次に$ 1を印刷します。 フィールド2はフィールド1でオーバーレイされます。

+0

ようこそスタックオーバーフロー、SleepyProgrammer!可能であれば詳細を追加することをお勧めします。この投稿はコメントのように見え、削除される可能性があります... – Badacadabra