簡體   English   中英

如何在新文件中轉置值和 output 結果

[英]How to transpose values and output results in new file

我的數據:

"1,2,3,4,5,64,3,9",,,,,1,aine
"2,3,4,5",,,,,3,bb
"3,4,5,6,6,2",,,,,2,ff

我必須像這樣在“....”分隔符內轉置值: 如何使用 shell 將值兩個兩個轉置?

和 Output 新文件中的結果(2列),文件名=(last-1)列數字。 我必須為輸入文件的每一行轉置。

我想要什么:

$ ls

1 2 3 4 5 6 7 8

示例:貓 1

 1 2
 3 4
 5 64 
 3 9

貓 2:

3 4
5 6
6 2

貓 3:

2 3
4 5

獎勵:如果我可以將每個最后的單詞(最后一列)作為新文件的標題,那將是完美的。

好的,花了一些時間,但我終於用下面的代碼解決了你的問題:

#!/bin/bash

while read -r LINE; do
    FILE_NAME=$(echo {$LINE##*,,,,,} | cut -d ',' -f 1 | tr -d "\"")
    DATA=$(echo ${LINE%%,,,,,*} | tr -d "\"" | tr "," " ")
    touch $FILE_NAME
    i=1
    for num in $DATA ;do
        echo -n "$num"
        if [[ $(($i%2)) == 0 ]]; then
            echo ""
        else
            echo -n " "
        fi
        i=$((i+1))
    done > $FILE_NAME
done < input.txt

在我的解決方案中,我想您的輸入應該放在文件input.txt中,並且您的所有輸入行都有,,,,,作為分隔符。 與您的示例輸入一起工作就像一個魅力。

假設輸入中沒有冒號(必要時選擇不同的臨時分隔符),第一部分可以通過以下方式完成:

awk '{s = ""; n = split($2,k,","); for(i = 1; i <= n; i+=2 ) { s = sprintf( "%s%c%s:%s", s, s ? ":" : "", k[i+1], k[i])} $2 = s}1' FS=\" OFS=\" input  | sort -t , -k6n | tr : ,

例如:

$ cat input
"1,2,3,4,5,64,3,9",,,,,1,aine
"2,3,4,5",,,,,3,bb
"3,4,5,6,6,2",,,,,2,ff
$ awk '{s = ""; n = split($2,k,","); for(i = 1; i <= n; i+=2 ) { s = sprintf( "%s%c%s:%s", s, s ? ":" : "", k[i+1], k[i])} $2 = s}1' FS=\" OFS=\" input  | sort -t , -k6n | tr : ,
"2,1,4,3,64,5,9,3",,,,,1,aine
"4,3,6,5,2,6",,,,,2,ff
"3,2,5,4",,,,,3,bb

但是,當您可以直接跳到第 2 部分時,不清楚為什么要執行第一部分:

awk '{n = split($2,k,","); m = split($3, j, ","); fname = j[6]; 
    for( i = 1; i <= n; i+=2 ) printf("%d %d\n", k[i+1], k[i]) > fname}' FS=\" input

我的回答跟不上問題的變化,如果您將這些行輸出到文件中。 如果您希望文件名成為最后一列,則無需對倒數第二列進行排序。 不清楚你為什么提到使用倒數第二列。 只需將上面的fname更改為j[7]即可獲得最后一列。

暫無
暫無

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

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