簡體   English   中英

awk單列到多列

[英]awk single column to multiple columns

我的輸入文件看起來像這樣,

0   1.0069770730517629     
0   1.0068122761874614     
0   1.0004297763706849     
1   1.0069220626905635     
1   1.0079998216945956     
1   1.0006092898635817     
2   1.0071274842017928    
2   1.0083750686808803     
2   1.0006868227863552     
3   1.0073693844413083     
3   1.0086546525825624     
3   1.0007234442925264   

我希望輸出文件看起來像這樣,

0   1.0069770730517629     1.0068122761874614     1.0004297763706849     
1   1.0069220626905635     1.0079998216945956     1.0006092898635817     
2   1.0071274842017928     1.0083750686808803     1.0006868227863552     
3   1.0073693844413083     1.0086546525825624     1.0007234442925264 

我想使用grep或awk將單列拆分為多個列。 有人可以幫助我嗎?

由於您明確指出“合並3行”:

paste - - - < file | awk -v OFS="    " '{print $1, $2, $4, $6}'

我將假設該文件已經排序。

另一個建議:只是awk,而沒有關於排序度的假設

gawk -v OFS="    " '
    {values[$1] = values[$1] OFS $2} 
    END {
        PROCINFO["sorted_in"] = "@ind_num_asc"
        for (key in values) print key values[key]
    }
' file

另一種使用pr且結尾相同的pr選項

pr -3at file | awk -v OFS="\t" '{print $1,$2,$4,$6}'

使用制表符分隔符代替空格。

這有效(在bash和zsh中):

printf "%s %s%.s %s%.s %s\n" $(< file)

或更便攜,因為printf和cat幾乎隨處可見。 (我認為這不符合無用的“貓的使用”獎 ,所以我希望:)

printf "%s %s%.s %s%.s %s\n" $(cat  file)

僅當:

  • 該文件是有序的,所有第一列的值都在一起,並且

  • 恰好有3個值要打印。

需要使用 printf 技巧避免打印某些字段 ,或者使用更精確的措辭:“從字符串中打印0個字符”:“%。s”。

Cyrus的原始想法是: printf "%s %s %s %s %s %s\\n" $(< file)

該答案不對要打印的值數量做任何假設,也不假設文件已排序。

#!/bin/bash

sort -n "file.csv" > "file.csv.tmp"

awk -v lastline="false" '{
    if (lastline != $1)
    {
        if (NR>1) { printf "\n"};
        {printf "%s   %s", $1, $2; lastline=$1; next};
    }
    else { printf "   %s", $2};

} END { printf "\n"}' "file.csv.tmp" #>"file.csv"

該程序首先對文件進行排序,以確保$1所有值都在一起。

然后使用lastline的值來控制操作。
var lastline最初設置為false以確保不匹配任何$1值。
如果lastline不是重復(不匹配$1 ),則將打印$1$2的值。 ...並且最后lastline已更新為該$1值。
如果lastline是重復的(等於$1 ),則僅打印$2
為了使格式正確,每行“ $1 ”都打印了一個換行符。 ...最后。

如果需要替換原始的“ file.csv”,請刪除注釋字符(#)以允許在最后一行中進行重定向。

將循環更改為if ... else。
也許這樣更具可讀性。

暫無
暫無

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

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