Điểm:1

bash: Cách tạo cặp khóa, giá trị từ tệp .txt trong linux

lá cờ cn
w | awk 'NR==1 {print $1}' >file.txt
tập tin mèo
NGƯỜI DÙNG TTY TỪ ĐĂNG NHẬP @ IDLE JCPU PCPU GÌ
dung nham1 pts/0 157.48.149.102 05:03 31.00s 0.31s 0.31s -bash
azureuse pts/1 157.48.149.102 07:26 0,00s 0,07s 0,05s w

Từ tệp văn bản trên, tôi muốn tạo các cặp khóa, giá trị như định dạng json như bên dưới là đầu ra dự kiến:

{
 "NGƯỜI DÙNG" : "dung nham1",
 "TTY" : "điểm/1",
 "TỪ" : "157.47.49.254",
 "ĐĂNG NHẬP" : "12:32",
 "IDLE" : "5,00 giây"
}
lá cờ cn
Trong bash? xem https://stackoverflow.com/questions/48470049/build-a-json-string-with-bash-variables
Andrej Podzimek avatar
lá cờ cn
Lệnh `awk` trong câu hỏi của bạn không có ý nghĩa gì. Đầu tiên, nó ghi vào một tệp khác, không phải vào tệp bạn `cat` bên dưới. Thứ hai, `file.txt` sẽ chứa thời gian hiện tại (từ đầu ra `w`), chứ không phải các dòng mà `file` chứa.
Andrej Podzimek avatar
lá cờ cn
`PROCPS_USERLEN=32 PROCPS_FROMLEN=32 w | đuôi -n+2 | trong khi đọc -r người dùng tty khỏi đăng nhập nhàn rỗi hủy bỏ; do echo -e '{\n "USER" : "'"$user"'",\n "TTY" : "'"$tty"'",\n "FROM" : "'"$from"'" ,\n "ĐĂNG NHẬP" : "'"$login"'",\n "IDLE" : "'"$idle"'"\n}'; done` Dù sao đi nữa, hai biến môi trường cho thấy tại sao việc phân tích cú pháp đầu ra từ `w` chỉ đơn giản là một ý tưởng tồi. Chưa kể rằng bạn cũng có thể cần xuất (ví dụ:) `LC_ALL=en_US.UTF-8` để có đầu ra nhất quán. Nếu không, ngày đăng nhập sẽ được đánh vần bằng ngôn ngữ hiện tại, v.v.
Điểm:2
lá cờ hr

tôi muốn đề nghị cối xay đối với những thứ như thế này - cụ thể là chuyển đổi từ "bản in đẹp" sang JSON:

$ mlr --ipprint --ojson tệp mèo
{ "USER": "lava1", "TTY": "pts/0", "FROM": "157.48.149.102", "LOGIN@": "05:03", "IDLE": "31.00s", " JCPU": "0,31s", "PCPU": "0,31s", "CÁI GÌ": "-bash" }
{ "USER": "azureuse", "TTY": "pts/1", "FROM": "157.48.149.102", "LOGIN@": "07:26", "IDLE": "0.00s", " JCPU": "0,07 giây", "PCPU": "0,05 giây", "CÁI GÌ": "w" }

Chọn các trường cụ thể với cắt tỉa và đổi tên ĐĂNG NHẬP@ cánh đồng:

$ mlr --ipprint --ojson cut -f USER,TTY,FROM,LOGIN@,IDLE sau đó đổi tên tệp LOGIN@,LOGIN
{ "USER": "lava1", "TTY": "pts/0", "FROM": "157.48.149.102", "LOGIN": "05:03", "IDLE": "31.00s" }
{ "USER": "azureuse", "TTY": "pts/1", "FROM": "157.48.149.102", "LOGIN": "07:26", "IDLE": "0.00s" }
Điểm:0
lá cờ cn

Vì bạn muốn tạo JSON, hãy sử dụng

w \
| đuôi -n +3 \
| jq -R'. | split("\s+"; "g") | {USER:.[0], TTY:.[1], FROM:.[2], LOGIN:.[3], IDLE:.[4]}'

Tôi đang sử dụng đuôi để bỏ qua 2 dòng đầu tiên của w đầu ra.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.