簡體   English   中英

將單行文件拆分為多行文件,每行包含相同數量的單詞?

[英]Break a one-line file to a multi-line file, each line with the same number of words?

例如,單行文件line.txt具有以下行:

741 12 3 24 45 123 32 111 34

假設每個單詞的字數為3 那么目標是:

741 12 3
24 45 123
32 111 34

在這種情況下,哪些腳本可以提供幫助,不勝感激。

這對於awk來說將是一件容易的事。 我也看到了vim的問題,然后用vim嘗試了一下。

假設光標在該行的開頭。 你可以嘗試(在鍵入NORMAL模式):

100@='3f r^M'

然后輸入Enter

宏也可以由qn3f r<Enter>q記錄,那么您只需100@n

注意

  • 您需要輸入<CV><Enter>^M
  • 我沒有計算宏應該執行多少次,因此只給出了100。如果結果超過100行,則給出500或1000。:)
  • 如果給定數字有問題,例如行不能被3除,那么最后一行可能包含少於給定數字的列。 例如3。
cat your_file | tr " " "\n" | paste -s -d "  \n"

嘗試這個

printf "%s %s %s\n" $(cat line.txt)

它產生

741 12 3
24 45 123
32 111 34

這是使用sed的方法。 將單詞數固定為3 ,您可以執行以下操作:

sed 's/\( [^ ]* [^ ]*\) /\1\n/g' <filename>

如果要動態指定單詞數,可以使用以下腳本動態創建正則表達式:

#!/bin/sh

test $# -eq 2 || (echo "Usage: $(basename "${0}") <filename> <#words>" && exit 1)

for i in $(seq 2 "${2}"); do
    REGEX=" [^ ]*${REGEX}"
done

cat "${1}" | sed "s/\\(${REGEX}\\) /\\1\n/g"

一種使用awk

awk '{ 
  for ( i = 1; i <= NF; i++ ) { 
    printf "%s%s", $i, (i % 3 == 0) ? "\n" : " " 
  } 
}' line.txt

它產生:

741 12 3
24 45 123
32 111 34

編輯以修復腳本(請參見注釋),用於多個字段(不是3的倍數):

awk '
  { 
    for ( i = 1; i <= NF; i++ ) { 
      printf "%s%s", $i, (i < NF && i % 3 == 0) ? "\n" : " " 
    } 
  } 
  END { printf "\n" }
' infile

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM