出力xargsの表示形式を変更したいです。
cat k.txt
1
2
3
そして
cat k.txt | xargs
1 2 3
1, 2, 3
しかし、私はまたはをしたいと思います1|2|3
。どんな提案がありますか?
ベストアンサー1
これらのファイルを取得する方法の12の例は次のとおりです。
$ cat k.txt
1
2
3
そして、次の形式に変換します。
1,2,3
一緒にプレイするには、次のコマンドを使用して上記のファイルを生成できます。
$ cat <<EOF > k.txt
1
2
3
EOF
以下の例は2つのグループに分かれています。 「動作」して「ほぼ」動作すること。何度も何かがうまくいかないのを理解することは、なぜそれがうまくいくのかを理解するのと同じくらい重要なので、これを省略します。
私がよく知っているほとんどのスクリプト言語が表現されています。 Perlでよく引用されているよく知られている略語のように、いくつかは何度も表されます。チームトウィディ。
メモ:,
次の例では、カンマ()を目的の文字(たとえば)に置き換えることができます|
。
「有効」の例
これらのコードフラグメントは必要な出力を生成します。
注文するpaste
:
$ paste -s -d ',' k.txt
1,2,3
注文するsed
:
$ sed ':a;N;$!ba;s/\n/,/g' k.txt
1,2,3
$ sed ':a;{N;s/\n/,/};ba' k.txt
1,2,3
注文するperl
:
$ perl -00 -p -e 's/\n(?!$)/,/g' k.txt
1,2,3
$ perl -00 -p -e 'chomp;tr/\n/,/' k.txt
1,2,3
注文するawk
:
$ awk '{printf"%s%s",c,$0;c=","}' k.txt
1,2,3
$ awk '{printf "%s,",$0}' k.txt | awk '{sub(/\,$/,"");print}'
1,2,3
$ awk -vORS=, 1 k.txt | awk '{sub(/\,$/,"");print}'
1,2,3
$ awk 'BEGIN {RS="dn"}{gsub("\n",",");print $0}' k.txt | awk '{sub(/\,$/,"");print}'
1,2,3
注文するpython
:
$ python -c "import sys; print sys.stdin.read().replace('\n', ',')[0:-1]" <k.txt
1,2,3
$ python -c "import sys; print sys.stdin.read().replace('\n', ',').rstrip(',')" <k.txt
1,2,3
バッシュmapfile
内蔵:
$ mapfile -t a < k.txt; (IFS=','; echo "${a[*]}")
1,2,3
注文するruby
:
$ ruby -00 -pe 'gsub /\n/,",";chop' < k.txt
1,2,3
$ ruby -00 -pe '$_.chomp!"\n";$_.tr!"\n",","' k.txt
1,2,3
注文するphp
:
$ php -r 'echo strtr(chop(file_get_contents($argv[1])),"\n",",");' k.txt
1,2,3
ガイドライン
上記の例はほとんどうまく機能します。上記のPHPの例のように、一部には隠された問題があります。この関数はchop()
実際にはエイリアスなので、rtrim()
最後の行の末尾のスペースも削除されます。
最初のRubyの例と最初のPythonの例でも同じです。問題は、彼らが本質的に末尾の文字を盲目的に「切り取る」作業をどのように活用するかです。 OPによって提供された例では問題ありませんが、このタイプのライナーを使用するときは、作業中のデータに合うように注意する必要があります。
はい
たとえば、サンプルファイルはk.txt
次のようになります。
$ echo -en "1\n2\n3" > k.txt
似ているようですが、若干の違いがあります。\n
元のファイルなど、末尾の改行文字()はありません。最初のPythonの例を実行すると、次のような結果が表示されます。
$ python -c "import sys; print sys.stdin.read().replace('\n', ',')[0:-1]" <k.txt
1,2,
「ほぼ」操作の例
これらは「いつも花嫁介添人だから花嫁じゃないよ」はい。これらのほとんどは適応可能ですが、問題に対する潜在的な解決策を見つけるときに「強制的」であると感じると、作業に適したツールではない可能性があります。
注文するperl
:
$ perl -p -e 's/\n/,/' k.txt
1,2,3,
注文するtr
:
$ tr '\n' ',' < k.txt
1,2,3,
cat
+コマンドecho
:
$ echo $(cat k.txt)
1 2 3
注文するruby
:
$ ruby -pe '$_["\n"]=","' k.txt
1,2,3,
Bashのwhile
+read
組み込み機能:
$ while read line; do echo -n "$line,"; done < k.txt
1,2,3,