Linuxサーバーにフィールドの分散がある複数の行を持つcsvファイルがあります。私はすべてのレコードが最大数の列を持つ行(空の値)を持つようにしたいと思います。私はこれをbashスクリプトで実現する必要があります。可能であればawkを使ってみたいと思っています。私はbashを初めて使っています。.csvファイルにbashの各行の列数が同じであることを確認してください。
答えて
awk
レスキュー あなたは説明
$ awk -F, -v OFS=, 'NR==FNR{if(max<NF)max=NF;next};
{NF=max}1' file{,}
1,2,3,4,5,
1,2,3,4,,
1,2,3,,,
1,2,3,4,5,6
T.J.のサンプル入力ファイルを使用して、ひとつのスクリプトですべての操作を行うことができます。最初のラウンドは最大を計算し、第二に使用するにこれは、ダブルパスアルゴリズムです。 NR==FNR
は最初のファイルでのみtrueで、maxを計算します。デフォルト値はゼロで長さは負ではないため、maxを初期化する必要はないことに注意してください。 next
はスクリプトの残りの部分をスキップします。第2ラウンドの設定では、NF=max
は少ないフィールドでレコードをいっぱいにします。 1
は、awk
のデフォルトに基づく印刷(または真のステートメント)の略語として使用されます。また、file{,}
は、ダブルパスアルゴリズムで同じファイルを2回使用するとfile file
に解決されます。
同じことは、シングルパスの配列とENDブロックでも記述できます。
T.J.のサンプルはどこですか? –
ブラボー - ベストアンサー!説明を追加していただきありがとうございます。 –
美しく働いた!ありがとうございました!素晴らしい説明も。私はbashを初めて使っているので、誰かが何が起こっているのか、特にawkについて説明するのは素晴らしいことです! –
- 1. 各行のgridview列の値が同じであることを確認してください
- 2. dirのファイルが同じであることを確認してください
- 3. csvファイルの列数を確認してください
- 4. サブモジュールコミットがリポジトリと同じであることを確認してください
- 5. CSVファイルをループして各行の列数を確認する
- 6. 行列が正方形であることを確認してください
- 7. CSVが空であることを確認してください。
- 8. 同じコンポーネントの複数のインスタンスが非共有状態であることを確認してください
- 9. 文字列が数字であることを確認してください
- 10. bash:変数の値が既存の変数の名前であることを確認してください
- 11. ユーザインプットをチェックして各intがJavaの数字であることを確認してください
- 12. 新しい値が古い値と同じであることを確認してください。
- 13. MySQLの列が空であることを確認してください
- 14. 2つのXML文書がjavascriptと同じであることを確認してください
- 15. 大文字がbashスクリプトの変数入力の冒頭にあることを確認してください
- 16. 変数の型がプリミティブであることを確認してください
- 17. すべてのアイテムが同じクラスであることを確認してください
- 18. 変数が数字であることを確認してください
- 19. Bash:ファイル内の値を確認してください
- 20. Jinja2で配列が空であることを確認してください
- 21. ファイルがOfficeアドインマニフェストであることを確認してください
- 22. .txtファイルが最新であることを確認してください
- 23. ANT:ファイルが空であることを確認してください
- 24. ファイルが疎であることを確認してください
- 25. HttpContext.Current.Request.Files ["filex"]にファイルがあることを確認してください
- 26. bash配列の値がすべて同じかどうかを確認してください
- 27. matlabで行列がNanでないことを確認してください
- 28. Python 3:リスト内の最大要素が同じであることを確認してください
- 29. 2つのテーブルの値が同じであることを確認する(チェックマークを付けてください)
- 30. C++ - TCHAR配列が空であることを確認してください
カラムはどのように分かれていますか? 'awk '{NF = 5} 1' file.txt'はスペース上の各行を分割し、最初の5列を出力します。そして、 '-F '、' 'を使うことで区切り文字としてカンマを設定することができます。 – andlrc
はい、カンマで区切られています。 –