將偶數/奇數行印到新列

將偶數/奇數行印到新列

我有一個單列中有 X 行的文件,我想將每個偶數/奇數行列印到新列,這在 Linux 或vim編輯器中可能嗎?

例如:

輸入檔:

RESOLUTION: 1.70
UNIT: MONOMERIC
RESOLUTION: 1.80
UNIT: DIMERIC
RESOLUTION: 2.50
UNIT: TRIMERIC
RESOLUTION: 2.20
UNIT: TETRAMERIC

輸出文件,我需要:

RESOLUTION: 1.70    UNIT: MONOMERIC
RESOLUTION: 1.80    UNIT: DIMERIC
RESOLUTION: 2.50    UNIT: TRIMERIC
RESOLUTION: 2.20    UNIT: TETRAMERIC

答案1

嘗試下面。

$cat a.txt
RESOLUTION: 1.70
UNIT: MONOMERIC
RESOLUTION: 1.80
UNIT: DIMERIC
RESOLUTION: 2.50
UNIT: TRIMERIC
RESOLUTION: 2.20
UNIT: TETRAMERIC

$ cat a.txt | sed 'N;s/\n/ /g'
RESOLUTION: 1.70 UNIT: MONOMERIC
RESOLUTION: 1.80 UNIT: DIMERIC
RESOLUTION: 2.50 UNIT: TRIMERIC
RESOLUTION: 2.20 UNIT: TETRAMERIC

答案2

假設資料在檔案 z1 上,那麼

paste -sd "\t\n" z1

將產生:

RESOLUTION: 1.70        UNIT: MONOMERIC
RESOLUTION: 1.80        UNIT: DIMERIC
RESOLUTION: 2.50        UNIT: TRIMERIC
RESOLUTION: 2.20        UNIT: TETRAMERIC

在這樣的系統上:

OS, ker|rel, machine: Linux, 3.16.0-7-amd64, x86_64
Distribution        : Debian 8.11 (jessie) 
bash GNU bash 4.3.30
paste (GNU coreutils) 8.23

最美好的祝愿...乾杯,drl

答案3

您正在尋找正確的位置(awk 或 sed)。

sed如果使用 gnu 就足夠了sed

https://www.gnu.org/software/sed/manual/sed.html#Numeric-Addresses

4.2 按數字選擇行

……

first~step 此 GNU 擴充功能符合從第一個行開始的每個步驟行。特別是,當存在非負 n 使得目前行號等於first + (n * step) 時,將選擇行。因此,可以使用 1~2 選擇奇數行,使用 0~2 選擇偶數行;要從第二行開始每隔三行選取一次,將使用「2~3」;若要從第十行開始每隔五行選取一次,請使用 '10~5';而「50~0」只是 50 的一種晦澀的說法。

以下命令示範了步驟位址的用法:

$ 序列 10 | sed -n '0~4p' 4 8

$ 序列 10 | sed -n '1~3p' 1 4 7 10

答案4

如果奇數行上有尾隨空格,您可以編寫一個ed腳本:

{ for((line=1; line <= $(wc -l < input) / 2; line++)); do printf '%d,%dj\n' "$line" "$((line + 1))"; done; echo "wq"; } | ed -s input

重新格式化:

{ for((line=1; line <= $(wc -l < input) / 2; line++))
  do 
    printf '%d,%dj\n' "$line" "$((line + 1))"
  done
  echo "wq"
} | ed -s input

總體思路是計算行數,將其除以二,列印ed命令將連接奇數行和偶數行。對於八行範例文件,循環將產生以下ed命令:

1,2j
2,3j
3,4j
4,5j

最後的echo命令只是告訴ed將文件寫入磁碟並退出(退出)。

此方法不會在相鄰行之間添加任何空格,因此如果您需要添加(比如說)一個選項卡,那麼您需要透過在現有的之前添加此行來插入它printf

        printf '%ds/$/  /\n' "$line"

您在替換文字中看到的空格是製表符(使用 , 輸入Control-VTAB

相關內容