2015-05-18 298 views
1

我真的很喜歡Bash和一般的腳本。 我必須創建名字的第一個字母后跟姓氏的用戶名。要做到這一點,我使用的是提供的文本文件,它看起來像這樣:從文本文件創建用戶名創建腳本?

doe,john 
smith,mike 
... 

我聲明瞭以下變量:

fname=$(cut -d, -f2 "file.txt" | cut -c1) 
lname=$(cut -d, -f1 "file.txt") 

但我怎麼把元素連接在一起形成的名稱JDOEmsmith?我想我所知道的連接字符串和vriables的方法,但沒有任何工程..

我想我發現使用AWK是應該工作的方法,但沒有任何其他的方式來「串聯」的元素2個列表? 謝謝

+0

這是一個迂迴的方式詢問如何[在bash中連接字符串變量?](http://stackoverflow.com/questions/4181703/how-can-i-concatenate-string-variables-in-bash ) –

回答

1

Ed Morton's awk-based answer是最簡單的(也可能是最快的),但既然你問了不同的解決方案:

#!/usr/bin/env bash 

while IFS=, read -r last first _; do 
    username=${first:0:1}${last} 
    echo "username: $username" 
done < file.txt 
  • IFS=, read -r last first _讀取每個輸入行的第2個, - 分隔字段(_是虛擬變量它接收輸入行的其餘部分(如果有的話); -r防止輸入中的\字符的解釋,這通常是您想要的)。
  • username=${first:0:1}${last}連接第1個字符。的變量$first的值與變量$last的值,只需將兩個變量引用放在一起即可。
  • < file.txt是輸入重定向該通過stdin發送file.txt的內容到while循環。
+0

非常感謝您的解釋 – sgh1980

+0

我的榮幸;我希望你會閱讀它們,除了@ geirha的有用鏈接(相對於提交複製和粘貼作業:) – mklement0

+1

絕對沒有剪切和粘貼。我想在這個方面做得更好,而不僅僅是通過一堂課:)再次感謝 – sgh1980

3

有一百萬的方式做到這一點,這是最簡單的:

$ awk -F, '{print substr($2,1,1) $1}' file 
jdoe 
msmith 
1

這看起來有點太像功課,所以我就放下了一些線索。

要將文件的每一行的姓氏和名字讀入單獨的變量,請參見BashFAQ 1。它不應該涉及cut

要獲取變量的第一個字符,請參閱BashFAQ 100

+0

這是一個功課:)我不知道BashFAQ,我會檢查出來,非常感謝! – sgh1980