溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Pipes中怎么利用LeetCode轉(zhuǎn)置文件

發(fā)布時(shí)間:2021-08-05 18:01:57 來(lái)源:億速云 閱讀:110 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家介紹Pipes中怎么利用LeetCode轉(zhuǎn)置文件,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

[LeetCode] 194.Transpose File 轉(zhuǎn)置文件

Given a text file file.txt, transpose its content.

You may assume that each row has the same number of columns and each field is separated by the ' ' character.

For example, if file.txt has the following content:

name age
alice 21
ryan 30

Output the following:

name alice ryan
age 21 30


這道題讓我們轉(zhuǎn)置一個(gè)文件,其實(shí)感覺(jué)就是把文本內(nèi)容當(dāng)做了一個(gè)矩陣,每個(gè)單詞空格隔開(kāi)看做是矩陣中的一個(gè)元素,然后將轉(zhuǎn)置后的內(nèi)容打印出來(lái)。那么我們先來(lái)看使用awk關(guān)鍵字的做法。其中NF表示當(dāng)前記錄中的字段個(gè)數(shù),就是有多少列,NR表示已經(jīng)讀出的記錄數(shù),就是行號(hào),從1開(kāi)始。那么在這里NF是2,因?yàn)槲谋局挥袃闪?,這里面這個(gè)for循環(huán)還跟我們通常所熟悉for循環(huán)不太一樣,通常我們以為i只能是1和2,然后循環(huán)就結(jié)束了,而這里的i實(shí)際上遍歷的數(shù)字為1,2,1,2,1,2,我們可能看到實(shí)際上循環(huán)了3遍1和2,而行數(shù)正好是3,可能人家就是這個(gè)機(jī)制吧。知道了上面這些,那么下面的代碼就不難理解了,遍歷過(guò)程如下:

i = 1, s = [name]

i = 2, s = [name; age]

i = 1, s = [name alice; age]

i = 2, s = [name alice; age 21]

i = 1, s = [name alice ryan; age 21]

i = 2, s = [name alice ryan; age 21 30]

然后我們?cè)賹中的各行打印出來(lái)即可,參見(jiàn)代碼如下:

解法一:

awk '{
    for (i = 1; i <= NF; ++i) {
        if (NR == 1) s[i] = $i;
        else s[i] = s[i] " " $i;
    }
} END {
    for (i = 1; s[i] != ""; ++i) {
        print s[i];
    }
}' file.txt

下面這種方法和上面的思路完全一樣,但是代碼風(fēng)格不一樣,上面是C語(yǔ)言風(fēng)格,而這個(gè)完全就是Bash腳本的風(fēng)格了,我們用read關(guān)鍵字,我們可以查看read的用法read: usage: read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...]。那么我們知道-a表示數(shù)組,將讀出的每行內(nèi)容存入數(shù)組line中,那么下一行for中的一堆特殊字符肯定讓你頭暈眼花,其實(shí)我也不能算特別理解下面的代碼,大概覺(jué)得跟上面的思路一樣,求大神來(lái)具體給講解下哈:

解法二:

while read -a line; do
    for ((i = 0; i < "${#line[@]}"; ++i)); do
        a[$i]="${a[$i]} ${line[$i]}"
    done
done < file.txt
for ((i = 0; i < ${#a[@]}; ++i)); do
    echo ${a[i]}
done

關(guān)于Pipes中怎么利用LeetCode轉(zhuǎn)置文件就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI